import {CHANGE_INPUT_VALUE, ADD_TODO_ITEM, DELETE_TODO_ITEM, INIT_LIST} from './actionType'

/**
 *仓库中的数据
 * @type {{inputValue: string, list: *[]}}
 */
const defaultState = {
    inputValue: '',
    list: []
}

/**
 * reducer是一个笔记本，笔记本里面存放了很多关于存储数据的情况，很多的数据以及如何对数据操作的一些内容
 * reducer 可以接受state，但绝不能修改state
 * Reducer是一个纯函数，纯函数指的是，给定固定的输入，就一定会有固定的输出，而且不会有任何副作用
 * @param state ： 存放所有数据的信息 ,指向上一次存儲的數據
 * @param action ： 用戶传递过来的信息
 * @returns {*} ： 返回给了store，用新数据替换旧数据，这个时候store里面的数据就被替换了
 */
export default (state = defaultState, action) => {

    const newState = JSON.parse(JSON.stringify(state));
    switch (action.type) {
        case CHANGE_INPUT_VALUE:
            newState.inputValue = action.value;
            break
        case ADD_TODO_ITEM:
            newState.list.push(newState.inputValue);
            newState.inputValue = '';
            break
        case DELETE_TODO_ITEM:
            newState.list.splice(action.index, 1)
            break;
        case INIT_LIST:
            newState.list = action.list
        default:
            break;
    }
    return newState
};